package JianZhiOffer;


import listnode.ListNode;

import java.util.ArrayList;
import java.util.Stack;

public class 从尾到头打印链表06 {

    ArrayList<Integer> tmp = new ArrayList<>();

    public int[] reversePrint(ListNode head) {
//        recur(head);
//        int[] res = new int[tmp.size()];
//        for(int i = 0; i < res.length; i++){
//            res[i] = tmp.get(i);
//        }
//        return res;
//    }
//    void recur(ListNode head) {
//        if(head == null) {
//            return;
//        }
//        recur(head.getNext());
//        tmp.add(head.getVal());
//    }

        // 2.栈，先进后出
        Stack<ListNode> stack = new Stack<>();
        ListNode temp = head;
        while (temp != null) {
            stack.push(temp);
            temp = temp.getNext();
        }

        // 遍历栈元素
        int size = stack.size();
        int[] print = new int[size];
        for (int i = 0; i < size; i++) {
            print[i] = stack.pop().getVal();
        }
        return print;

        // 3.不用栈，不用递归，双100%
//        ListNode node = head;
//        // 链表长度
//        int count = 0;
//        while (node != null) {
//            ++count;
//            node = node.getNext();
//        }
//
//        int[] nums = new int[count];
//        node = head;
//        // 数组从后向前遍历获取链表元素
//        for (int i = count - 1; i >= 0; --i) {
//            nums[i] = node.getVal();
//            node = node.getNext();
//        }
//        return nums;

    }
}
